package com.ms.demo;

import com.ms.demo.entity.Emp;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * @description: spring bean 相关测试
 * @author: ms
 * @create: 2022-08-23 15:55
 */
public class SpringBeanTest1 {

    @Test
    public void testBean01(){
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Emp bean1 = (Emp)context.getBean("emp");//根据名字获取bean对象
        Emp bean2 = context.getBean(Emp.class);//根据类型获取bean对象
        bean1.sayHello();
        bean2.sayHello();
        System.out.println("bean1:"+bean1.toString());
        System.out.println("bean2:"+bean2.toString());
    }

    @Test
    public void testBean02() throws SQLException {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        DataSource dataSource = context.getBean(DataSource.class);
        Connection connection = dataSource.getConnection();
        System.out.println(connection);
    }

    /**
    * @Description: testBeanLifeCycle 测试spring bean的生命周期
     * bean的生命周期过程
     *  1、bean对象创建（调用无参构造器）
     *  2、给bean对象设置属性
     *  3、bean对象初始化之前操作（由bean的后置处理器负责）
     *  4、bean对象初始化（需在配置bean时指定初始化方法）
     *  5、bean对象初始化之后操作（由bean的后置处理器负责）
     *  6、bean对象就绪可以使用
     *  7、bean对象销毁（需在配置bean时指定销毁方法）
     *  8、IOC容器关闭
     *
     * <-- 使用init-method属性指定初始化方法 -->
     * <-- 使用destroy-method属性指定销毁方法 -->
    * @Date: 2022/8/23 16:55
    */
    @Test
    public void testBeanLifeCycle() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("spring-bean的生命周期：6、bean对象就绪可以使用");
        context.close();
    }


    @Test
    public void testEmpFactoryBean() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Emp emp = (Emp)context.getBean("emp");
        context.close();
    }
}